<?php

  /**
    gd_class 类 作用，
    获取 传入的图片信息，
    并且 可以给图片 加水印，
     以及生成缩略图 

  */
   
   class ImageTool{
  
      public static function getmsg($opath){
      	 //判断文件是否存在
      	 if(!file_exists($opath)){
      	 	 return false;
      	 }

      	 //获取图片信息
      	 $msg = getimagesize($opath);
      	 if(!$msg){
      	 	return false;
      	 }

      	 $ow = $msg[0];
      	 $oh = $msg[1];

         //获取文件后缀
      	 $osuffix = substr(image_type_to_mime_type($msg[2]),strpos(image_type_to_mime_type($msg[2]),'/')+1);

      	 return ['ow'=>$ow,'oh'=>$oh,'osuffix'=>$osuffix];
      }

      /**
        加水印
        param $dst 原始图片
        param $srt 水印图片
        param $save 生成图片存放地址
        param $pct 水印透明度 0-100
        param $position 水印图片放置的位置 默认2 (0:左上角,1右上角:,2右下脚:,3:左下角)
      */
      public static function warte($dst,$src,$save=null,$pct=50,$position=2){
      	//判断图片信息是否存在
      	if(!file_exists($dst) || !file_exists($src)){
             echo '文件不存在';
      		return false;
      	}

      	//验证水印图片大小，不能超过原始图片大小
      	$dscmsg = self::getmsg($dst);
        $srcmsg = self::getmsg($src);
       
        $ow = $dscmsg['ow'];
        $oh = $dscmsg['oh'];

        $nw = $srcmsg['ow'];
        $nh = $srcmsg['oh'];

        //创建画布
        $dos = "imagecreatefrom" . $dscmsg['osuffix'];
        $dos1 = "imagecreatefrom" . $srcmsg['osuffix'];

        echo $dos;
        echo '<hr />';
        echo $dos1;

        if(!function_exists($dos) || !function_exists($dos1)){
        	echo '函数不存在';
        	 return false;
        }

        $dt = $dos($dst);
        $dt1 = $dos1($src);

        if( $ow < $nw || $oh < $nh){
        	echo '宽度不对';
        	return false;
        }

        //根据水印图片放置的位置确定宽高
        switch ($position) {
        	case 0:
        		$owidth = 0;
        		$oheight = 0;
        		break;
        	case 1:
        	    $owidth = $ow - $nw;
        	    $oheight = 0;
        	    break;
        	case 3:
        	     $owidth = 0;
        	     $oheight = $oh - $nh;
        	     break;     
        	default:
        		 $owidth = $ow - $nw;
        		 $oheight = $oh - $nh;
        		break;
        }

       imagecopymerge($dt,$dt1,$owidth,$oheight,0,0,$nw,$nh,$pct);

       //保存图片
       $sa = "image".$dscmsg['osuffix'];
       if(!function_exists($sa)){
             return false;
       }

      if(empty($save)){
      	$save = $dst;
      	// unlink($dst);  //删除原文件
       };

       $re = $sa($dt,$save);

      imagedestroy($dt);
      imagedestroy($dt1);

      return $re;
      }

      /**
         缩略图
         param $dst  原始图片
         param width 缩放后的宽度
         param height 缩放后的高度
         param save  缩放后图片放置的位置

      */ 
     public static function thumb($dst,$width,$height,$save=null){
     	//判断原始图片是否存在
     	if(!file_exists($dst)){
     		return false;
     	}

        // 获取原始图片信息
        $msg = self::getmsg($dst);
        if(!$msg){
        	return false;
        }

        $ow = $msg['ow'];
        $oh = $msg['oh'];
        $suffix = $msg['osuffix'];
        
        $dos = 'imagecreatefrom' . $suffix;
        if(!function_exists($dos)){
        	return false;
        }
        
        //创建空白画布
        $im = imagecreatetruecolor($width, $height);
        //创建原始图片画布
        $oim = $dos($dst);

        $grey = imagecolorallocate($im,200,200,200);
        imagefill($im, 0, 0, $grey);


        //获取缩略图 的缩略比列
        $bi = min($width/$ow,$height/$oh);

        //让缩略后的图片放在正中间，四边留白
        $dx = ($width-($ow*$bi))/2;
        $dy = ($height-($oh*$bi))/2; 
        
        //生成缩略图
        imagecopyresampled($im,$oim, $dx,$dy, 0, 0, $ow*$bi, $oh*$bi, $ow, $oh);

        //组合 保存图片的 方法，eg: imagepng,imagejpeg 等
        $dos1 = 'image'.$suffix;
        //判断该方法 函数是否存在。
        if(!function_exists($dos1)){
        	return false;
        }
        
        if(!$save){
        	$save = $dst;
        }

        $re = $dos1($im,$save);

        imagedestroy($im);
        imagedestroy($oim);

        return $re;
     }


     /** 
       增加验证码功能
       输出验证码
     */
       public static function yzm($len=4){
          $width = 60;
          $height = 30;
          //随机字符
          $stre = 'abcdefghijkmnopqrstuvwxyzABCDEFGHJKMNOPQRSTUVWXYZ23456789';
          $str = substr(str_shuffle($stre),0,4);

          $im = imagecreatetruecolor($width, $height);

          $grey = imagecolorallocate($im, 180, 180, 180);
          imagefill($im, 0, 0, $grey);

          $color = imagecolorallocate($im, mt_rand(0,150), mt_rand(0,150), mt_rand(0,150));

          imagettftext($im, 5, 0, 5, 20, $color, '../mydata/fzcyjt.ttf', $str);

          //不保存，直接输出
          header('content-type: image/jpeg');
          imagejpeg($im);

          //销毁画布
          imagedestroy($im);

       }




   }
   // ImageTool::getmsg('../wu.jpg');
   // echo ImageTool::warte('../timg.jpeg','../wu.jpg','../timg3.jpeg',50,2)?'true':'false';
   // echo ImageTool::thumb('../timg.jpeg',650,400,'../timg2.jpeg')?'true':'false';

?>